//package com.bootdo.clouddocommon.aspect;
//
//import com.bootdo.clouddocommon.annotation.Chain;
//import com.bootdo.clouddocommon.context.FilterContextHandler;
//import com.bootdo.clouddocommon.dto.ChainDO;
//import com.bootdo.clouddocommon.service.ChainRpcService;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.lang.reflect.Method;
//import java.util.Date;
//
//@Aspect // 切面，定义了通知与切点的关系
//@Component  // 交给Spring管理
//public class ChainAspect {
//    // 等同于@Slf4j
//    private static final Logger logger = LoggerFactory.getLogger(ChainAspect.class);
////    private
//
//    @Autowired
//    ChainRpcService chainService;
//
//    // 定义切点，需要是无参，无返回值的方法
//    @Pointcut("@annotation(com.bootdo.clouddocommon.annotation.Log)")
//    public void chainPointCut() {
//    }
//
//    // 环绕通知，本函数采用的是与大众教程相同的标准写法
//    @Around("chainPointCut()")
//    public Object around(ProceedingJoinPoint point) throws Throwable {
//        long beginTime = System.currentTimeMillis();
//        // 执行方法
//        Object result = point.proceed();
//        // 执行时长(毫秒)
//        long time = System.currentTimeMillis() - beginTime;
//        //异步保存日志
//        saveChain(point);
//        return result;
//    }
//
//    void saveChain(ProceedingJoinPoint joinPoint) throws InterruptedException {
//        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//        Method method = signature.getMethod();
//        ChainDO chain = new ChainDO();
//        // 加操作
//        Chain chainAnnotation = method.getAnnotation(Chain.class);
//        if (chainAnnotation != null) {
//            // 注解上的描述
//            chain.setOperation(chainAnnotation.value());
//        }
//
//
//        // 文件名
//        chain.setName("test");
//
//        // 用户名
//        chain.setOwner(FilterContextHandler.getUsername() == null ? "" : FilterContextHandler.getUsername());
//        // 系统当前时间
//        Date date = new Date();
//        chain.setUptime(date.toString());
//        // 保存系统日志
//        chainService.save(chain);
//    }
//}
//
